<?php
/**
 * CMysqlColumnSchema class file.
 * 保存Mysql列的信息.
 * @author Huan Song <iphper@yeah.net>
 * @version $Id: CMysqlColumnSchema.php 1 2011-06-08 22:17:17Z huan.song $
 * @package system.db.mysql
 * @since 2.0
 */
class CMysqlColumnSchema implements IDbColumnSchema
{
	/**
	 * @var string 列名.
	 */
	public $name;
	
	/**
	 * @var string 被引用的列名, 可以放在SQL中执行.
	 */
	public $rawName;
	
	/**
	 * @var boolean 是否允许为空.
	 */
	public $allowNull = false;
	
	/**
	 * @var string 列的数据库式类型.
	 */
	public $dbType;
	
	/**
	 * @var string 列的PHP语言式类型.
	 */
	public $type;
	
	/**
	 * @var mixed 默认的值
	 */
	public $defaultValue;
	
	/**
	 * @var integer 列的长度.
	 */
	public $size;
	
	/**
	 * @var integer 精度.
	 */
	public $scale;
	
	/**
	 * @var boolean 是否是主键.
	 */
	public $isPrimaryKey = false;
	
	/**
	 * @var boolean 是否是外键.
	 */
	public $isForeignKey = false;
	
	/**
	 * @var boolean 是否是自增的.
	 */
	public $autoIncrement = false;
	
	/**
	 * 通过列的类型, 转换值的类型.
	 * @param mixed $value input value
	 * @return mixed converted value
	 */
	public function typecast($value)
	{
		if (null === $value || gettype($value) === $this->type)
			return $value;
		
		if ($value === '')
			return $this->type === 'string' ? '' : null;
		
		switch($this->type)
		{
			case 'string': return (string) $value;
			case 'integer': return (integer) $value;
			case 'boolean': return (boolean) $value;
			case 'double':
			default: return $value;
		}
	}
}
